/*
 *
 * 名称：干十
 * 功能：十天干、生长状态等逻辑
 * 作者：清河张
 * 时间：2025.05.12
 *
 */

#include "gan10.h"
#include "zhi12.h"
#include <cstdio>
#include <cstring>
#include <cstdlib>

template <> ZHSH_T ZHSH12::_objs[12] =
    {
        {0 , "长"},
        {1 , "沐"},
        {2 , "冠"},
        {3 , "官"},
        {4 , "帝"},
        {5 , "衰"},
        {6 , "病"},
        {7 , "死"},
        {8 , "墓"},
        {9 , "绝"},
        {10, "胎"},
        {11, "养"},
        };

ZHSH_T::ZHSH_T():
    CT(-1, "")
{

}


ZHSH_T::ZHSH_T(int id, const char * name):
    CT(id, name)
{

}



GAN_T::GAN_T():
    CT(GAN_T::G___, " "), _zs(ZHI_T::Z___)
{

}

GAN_T::GAN_T(int id, int zs, const char *name):
    CT(id,name), _zs(zs)
{

}


ZHSH12 GAN_T::nengliang() const
{
    return _nl;
}

int GAN_T::yu(int z)
{
    int nl = 0;

    if( z < 0)
    {
        nl = -1;
    }
    else
    {
        if(iyy())
            nl = (z + 12 - _zs ) % 12;
        else
            nl = (_zs + 12 - z ) % 12;
    }

    _nl = nl;
    return _nl;
}



int GAN_T::iyy() const
{
    return (id() + 1 ) % 2;
}

YY GAN_T::yy() const
{
    return iyy();
}

YY GAN_T::ts() const
{
    return ( id() + 2 ) % 10 < EGAN::JIII ;
}


template <> GAN_T ZHOUQI<GAN_T,10>::_objs[10] =
    {
        {GAN_T::JIAA, ZHI_T::HAII, "甲", },
        {GAN_T::YIII, ZHI_T::WUU3, "乙", },
        {GAN_T::BING, ZHI_T::YINN, "丙", },
        {GAN_T::DING, ZHI_T::YOUU, "丁", },
        {GAN_T::WUUU, ZHI_T::YINN, "戊", },
        {GAN_T::JIII, ZHI_T::YOUU, "己", },
        {GAN_T::GENG, ZHI_T::SII4, "庚", },
        {GAN_T::XINN, ZHI_T::ZIII, "辛", },
        {GAN_T::RENN, ZHI_T::SHEN, "壬", },
        {GAN_T::GUII, ZHI_T::MAO3, "癸", }
};

GAN10::GAN10():ZHOUQI<GAN_T,10>(G___)
{

}

GAN10::GAN10(int id):ZHOUQI<GAN_T,10>(id)
{

}

GAN10::GAN10(const ZHOUQI<GAN_T, 10> &gt):ZHOUQI<GAN_T, 10> (gt)
{

}

GAN10 &GAN10::operator =(const ZHOUQI<GAN_T, 10> &gt)
{
    ZHOUQI<GAN_T, 10>::operator =(gt);
    return *this;
}

GAN10 &GAN10::operator =(int id)
{
    ZHOUQI<GAN_T, 10>::operator =(id);
    return *this;
}


GAN10 GAN10::chong() const
{
    if(invalid())
    {
        return GAN_T::G___;
    }
    if(id() < (int)EGAN::WUUU) return EGAN(id() + 6);
    if(id() > (int)EGAN::JIII) return EGAN(id() - 6);
    return GAN_T::G___;
}

GAN10 GAN10::ke() const
{
    if(invalid()) return GAN_T::G___;
    return EGAN(( id() + 4 ) % 10);
}

WUXING5 GAN10::he5(GAN10* g) const
{
    if(invalid()) return WUXING5::WX__;
    if(g) *g = *this + 5;
    return ( WUXING5::TUUU + id() % 5 ) % 5;
}

WUXING5 GAN10::wx5() const
{
    if(invalid()) return WUXING5::WX__;
    return id() / 2;

}

const char* GAN10::_gky[10][10] =
    {
        {
            "符+符 伏吟格局 进展缓慢 不利发展",
            "符+乙 ",
            "符+丙 ",
            "符+丁 ",
            "符+戊 ",
            "符+己 ",
            "符+庚 天乙飞宫 主客大凶 尤不利客",
            "符+辛 ",
            "符+壬 ",
            "符+癸 "
        },
        {
            "乙+符",
            "乙+乙 日奇伏吟 宜静宜守 不利谒贵 不利求名",
            "乙+丙 奇仪顺遂 吉星升迁 凶星离别 红杏出墙",
            "乙+丁 奇仪相佐 文书事吉 利于合作 百事可为",
            "乙+戊 利阴害阳 门凶墓迫 破财伤人 不利公开",
            "乙+己 日奇入墓 被土暗昧 门凶事凶 门吉有救",
            "乙+庚 日奇被刑 争讼财产 夫妻怀私 未婚同居",
            "乙+辛 青龙逃走 奴仆拐带 六畜皆伤 女人弃婚",
            "乙+壬 日奇天罗 尊卑悖乱 官灾是非 有人谋害",
            "乙+癸 日奇地网 遁迹隐形 躲灾避难 退吉进凶"
        },
        {
            "丙+符",
            "丙+乙 日月并行 阴阳得位 刚柔结合 谋为皆吉",
            "丙+丙 月奇悖师 文书逼迫 票据文章 破耗遗失",
            "丙+丁 星奇朱雀 文书吉利 常人宜静 炎症病变",
            "丙+戊 飞鸟跌穴 谋为洞彻 迫墓击刑 减吉至凶",
            "丙+己 火悖入刑 囚人刑杖 文书不行 吉凶看门",
            "丙+庚 荧入太白 门户破财 盗耗遗失 贼病皆去",
            "丙+辛 月奇相合 凶象被合 谋事成就 病人不凶",
            "丙+壬 火入天网 为客不利 是非颇多 越来越乱",
            "丙+癸 月奇地网 暗昧不明 阴人害事 灾祸颇多"
        },
        {
            "丁+符",
            "丁+乙 玉女生奇 加官进禄 婚姻财喜 利于文章",
            "丁+丙 星随月转 小人得志 贵人高升 常人生悲",
            "丁+丁 星奇伏吟 文书即至 喜事遂心 万事如意",
            "丁+戊 青龙转光 官人升迁 常人威昌 利婚求学",
            "丁+己 火入勾陈 奸私仇冤 事因女人 谋为不利",
            "丁+庚 星奇受阻 文书阻隔 消息不通 行人必归",
            "丁+辛 朱雀入狱 罪人释囚 官人失位 牢狱之灾",
            "丁+壬 奇仪相合 凡事能成 贵人辅助 测婚苟合",
            "丁+癸 朱雀投江 文书口舌 音信沉溺 官府词讼"
        },
        {
            "戊+符",
            "戊+乙 青龙合会 有贵人助 合主病多 吉凶看门",
            "戊+丙 青龙返首 大吉大利 墓迫击刑 吉事成凶",
            "戊+丁 青龙耀明 谒贵求名 墓迫击刑 减吉至凶",
            "戊+戊 青龙伏吟 凡事闭塞 静守为吉 六甲可谋",
            "戊+己 贵人入狱 公私不利 冲出墓库 方有转机",
            "戊+庚 值符飞宫 吉事不吉 凶事更凶 移换逃迁",
            "戊+辛 青龙折足 吉门可谋 凶门灾破 足疾折伤",
            "戊+壬 青龙天牢 诸事不利 投资亏本 测病主凶",
            "戊+癸 青龙华盖 为利而合 事有合绊 吉凶看门"
        },
        {
            "己+符",
            "己+乙 地户逢星 墓神不明 遁迹隐形 前途渺茫",
            "己+丙 火悖地户 男被冤害 女被淫污 感情出轨",
            "己+丁 朱雀入墓 文书词讼 先曲后直 拨云见日",
            "己+戊 犬遇青龙 门吉可谋 门凶徒劳 吉凶看门",
            "己+己 地户逢鬼 病者必死 百事不遂 不可谋为",
            "己+庚 刑格反名 谋为徒劳 先动不利 谨防谋害",
            "己+辛 游魂入墓 人鬼相侵 鬼魅作祟 凡事谨慎",
            "己+壬 地网高张 狡童佚女 奸情伤杀 事多变动",
            "己+癸 地刑玄武 疾病垂危 囚狱词讼 事关私欲"
        },
        {
            "庚+符 天乙伏宫 主客不利",
            "庚+乙 太白逢星 流连牵绊 退吉进凶 夫妻不和",
            "庚+丙 太白入荧 占贼必来 为客进利 为主破财",
            "庚+丁 金屋藏娇 婚外有情 私匿官司 门吉有救",
            "庚+戊 值符伏宫 破财伤人 不利合作 百事皆凶",
            "庚+己 官府刑格 私欲伤害 官讼判刑 主客不利",
            "庚+庚 太白同宫 官灾横祸 兄弟不和 变动争财",
            "庚+辛 白虎干格 远行不利 车折马死 诸事灾殃",
            "庚+壬 移荡之格 远行迷失 音信皆阻 多主变动",
            "庚+癸 反吟大格 行人不至 官司破财 生产皆伤"
        },
        {
            "辛+符",
            "辛+乙 白虎猖狂 家破人亡 远行多殃 男人弃婚",
            "辛+丙 干合悖师 合中有乱 因财致讼 吉凶看门",
            "辛+丁 狱神得奇 经商倍利 囚人赦免 意外收获",
            "辛+戊 困龙被伤 屈抑守分 妄动祸殃 官司破财",
            "辛+己 入狱自刑 奴仆背主 狱讼难伸 自错破财",
            "辛+庚 白虎出力 主客相残 强进血衫 退避尚可",
            "辛+辛 伏吟天庭 公废私就 讼狱由己 自罹罪名",
            "辛+壬 凶蛇入狱 两男争女 讼狱不息 先动失理",
            "辛+癸 天牢华盖 日月失明 误入天网 动辄乖张"
        },
        {
            "壬+符",
            "壬+乙 小蛇得势 女子温柔 男子发达 占孕生子",
            "壬+丙 水蛇入火 官灾刑禁 络绎不绝 两败俱伤",
            "壬+丁 干合蛇刑 文书牵连 贵人匆匆 男吉女凶",
            "壬+戊 小蛇化龙 升迁得势 男人发达 女产婴童",
            "壬+己 反吟蛇刑 官司败诉 大祸将至 顺守可吉",
            "壬+庚 太白擒蛇 难以发展 刑狱公平 立判邪正",
            "壬+辛 螣蛇相缠 琐事缠绕 动荡不安 被人欺瞒",
            "壬+壬 天狱自刑 求谋无成 内起祸患 诸事破败",
            "壬+癸 幼女奸淫 奸私隐情 家丑外扬 测婚乱搞"
        },
        {
            "癸+符",
            "癸+乙 华盖逢星 贵人禄位 常人平安 吉凶看门",
            "癸+丙 华盖悖师 贵贱不利 因势利导 反凶为吉",
            "癸+丁 螣蛇夭矫 口舌是非 文书官司 火焚难逃",
            "癸+戊 天乙合会 婚姻财喜 合作投资 吉门可行",
            "癸+己 华盖地户 阴阳不和 音信皆阻 躲避为吉",
            "癸+庚 太白入网 吉事成空 暴力争讼 自罹罪责",
            "癸+辛 网盖天牢 官司败诉 死罪难逃 测病大凶",
            "癸+壬 复见螣蛇 嫁娶重婚 后嫁无子 不保年华",
            "癸+癸 天网四张 行人失伴 病讼皆伤 不可谋为"
        }
};

const char *GAN10::gky(GAN10 t, GAN10 d)
{
    if(t.invalid() || d.invalid())
    {
        return "";
    }
    return _gky[t.id()][d.id()];
}

